#include <stdio.h>
#include <varargs.h> требуется для совместимости с UNIX V.
#include <stdarg.h> требуется для совместимости со стандартом ANSI C.
int vfprintf(stream, format-string, arg-ptr);
int vprintf(format-string, arg-ptr);
int vsprintf(buffer, format-string, arg-ptr);
FILE *stream; указатель на структуру типа FILE.
char *buffer; память для хранения результата
char *format-string; строка управления форматом
va_list arg-ptr; указатель на список аргументов.
Описание.
Функции vfprintf, vprintf, vsprintf форматируют и выводят данные соответственно в поток stream, поток стандартного вывода и буфер buffer. Эти функции похожи на свои двойники fprintf, printf, sprintf, но используют указатель на список аргументов вместо списка аргументов.
Format-string имеет ту же самую форму и функцию, что и аргумент строки формата для функции printf; (см. описание функции printf).
Параметр arg-ptr имеет тип va_list, определяемый в <vararg.h> и <stdarg.h>. Этот параметр указывает на список аргументов, которые преобразовываются и выводятся согласно соответствующим спецификациям формата в format-string.
Возвращаемое значение.
Возвращаемым значением является количество выведенных символов.
Пример:
В качестве примера приводится листинг программы, использующей <varargs.h> для совместимости с UNIX V.
#include <stdio.h>
#include <varargs.h>
main ()
{
int line = 1;
char *filename = "EXAMPLE";
.
.
.
error("Error: line %d, file %s\n", line, filename);
.
.
.
error("Syntax error\n");
}
error(va_alist);
va_dcl;
{
char *fmt;
va_list arg_ptr;
va_start(arg_ptr);
/* arg_ptr сейчас указывает на строку формата */
fmt = va_arg(arg_ptr, char *);
/* arg_ptr сейчас указывает на аргумент после строки форма-
та */
vprintf(fmt, arg_ptr);
va_end(arg_ptr);
}
На выходе:
Error: line 1, file EXAMPLE
Syntax error.
Ниже приводится аналогичная программа, перезаписанная для совместимости со стандартом ANSI C.
#include <stdio.h>
#include <stdarg.h>
main ()
{
int line = 1;
char *filename = "EXAMPLE";
.
.
.
error("Error: line %d, file %s\n", line, filename);
.
.
.
error("Syntax error\n");
}
error(fmt);
char *fmt;
{
va_list arg_ptr;
va_start(arg_ptr, fmt);
/* arg_ptr сейчас указывает на аргумент после строки форма-
та */
vprintf(fmt, arg_ptr);
va_end(arg_ptr);
}
На выходе:
Error: line 1, file EXAMPLE
Syntax error.